<?php
/*
 * 文件操作类
 * @author andery <andery@foxmail.com>
 * @link http://www.minophp.com/
 * @version $Id: CFile.lib.php 2010-07-08 23:12:10Z andery $
 */
class CFile
{
    /**
     * 读取文件内容
     * @param string $file
     * @return string
     */
    public static function file_read($file)
    {
        if (function_exists('file_get_contents')) {
            @$content = file_get_contents($file);
        } else {
            if (@$fp = fopen($file, 'r')) {
                @$content = fread($fp, filesize($file));
                @fclose($fp);
            }
        }
        return $content;
    }
    
    /**
     * 内容写入文件
     * @param string $file
     * @param string $content
     * @param string $mod
     * @return bool
     */
    public static function file_write($file, $content, $mod='w')
    {
        if (@$fp = fopen($file, $mod)) {
            flock($fp, 2);
            fwrite($fp, $content);
            fclose($fp);
            return true;
        } else {
            return false;
        }
    }
    
    /**
     * 重命名文件
     * @param string $oldname
     * @param string $newname
     * @return bool
     */
    public static function file_rename($oldname,$newname)
    {
        if (PHP_OS=='WINNT') {
            @copy($oldname,$newname);
            @unlink($oldname);
            if (is_file($newname)) {
                return true;
            } else {
                return false;
            }
        } else {
            return rename($oldname,$newname);
        }
    }
    
    /**
     * 获得文件后缀名
     * @param string $file
     * @return string
     */
    public static function file_ext($file)
    {
        return substr($file,strrpos($file,'.')+1);
    }
    
    /**
     * 创建目录（如果该目录的上级目录不存在，会先创建上级目录）
     * 
     * @param string $path  相对根目录路径 开头必须加'/'
     * @param   int $mode 目录权限
     * @return  bool
     */
    public static function sz_mkdir($root_path, $relative_path, $mode = 0777)
    {
        if (is_dir($root_path.$relative_path)) {
            return true;
        }
        $relative_path = trim($relative_path, '/');
        $each_path = explode('/', $relative_path);
        $cur_path = $root_path;
        foreach ($each_path as $path) {
            if ($path) {
                $cur_path = $cur_path . '/' . $path;
                if (!is_dir($cur_path)) {
                    if (@mkdir($cur_path, $mode)) {
                        fclose(fopen($cur_path . '/index.htm', 'w'));
                    } else {
                        return false;
                    }
                }
            }
        }
        return true;
    }
    
    /**
     * 删除文件夹以及下面的所有文件夹和文件
     * @return bool
     */
    public static function remove_dir($dir)
    {
        if ($hd = opendir($dir)) {
            while (false !==($file = readdir($hd))){
                if ($file!='.' && $file!='..') {
                    if (!is_dir($dir.'/'.$file)) {
                        @unlink($dir.'/'.$file);
                    } else {
                        self::remove_dir($dir.'/'.$file);
                    }
                }
            }
            closedir($hd);
            if (rmdir($dir)) {
                return true;
            } else {
                return false;
            }
        }
    }
    
    public static function size_count($size)
    {
        $count = 0;
        $format = array("Bytes","KB","MB","GB","TB","PB","EB","ZB","YB");
        while(($size/1024)>1 && $count<8)
        {
            $size=$size/1024;
            $count++;
        }
        $return = number_format($size,0,'','.')." ".$format[$count];
        return $return;
    }
}